package com.easy.controller;

import com.easy.bean.Guests;
import com.easy.bean.Reservations;
import com.easy.bean.Rooms;
import com.easy.common.CommonResult;
import com.easy.dao.IReservationsDao;
import com.easy.service.IGuests;
import com.easy.service.IReservations;
import com.easy.service.IRooms;
import com.easy.util.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;

@RestController
@CrossOrigin
public class ReservationsController {
    // 使用 @Autowired 注解自动装配一个 IReservationsDao 接口的实现类实例到 dao 变量中。
// IReservationsDao 接口通常定义了与数据库交互的方法，例如添加、查询员工信息等。
    @Autowired
    IReservationsDao dao;

    @Autowired
    IGuests easyE;
    // 使用 @Autowired 注解自动装配一个 IReservations 接口的实现类实例到 easyS 变量中。
// IReservations 接口通常定义了更高层次的业务逻辑方法，例如获取员工信息等。
    @Autowired
    IReservations easyS;

    @Autowired
    IRooms easyR;

    //查询
    @GetMapping("searchreservations")
    public CommonResult getSearchReservations(Reservations reservations, Page page){
        // 使用 @Autowired 注解自动装配一个 IReservations 接口的实现类实例到 easyS 变量中。
        // IReservations 接口通常定义了更高层次的业务逻辑方法，例如获取员工信息等。
        List<Reservations> list=easyS.getSearchEmployess(reservations,page);
        // 调用 easyS 中的 getCount 方法，传入 Reservations 对象，
        // 该方法用于计算满足条件的员工总数。
        int count=easyS.getCount(reservations);

        HashMap map=new HashMap();
        // 将查询到的员工列表放入 HashMap 中，键为 "list"
        // 将员工总数放入 HashMap 中，键为 "count"。
        map.put("list",list);
        map.put("count",count);
        // 返回一个成功的 CommonResult 对象，其中包含封装好的数据（员工列表和总数）。
        return CommonResult.success(map);
    }

    @PostMapping("reservations")
    public String addReservations(Reservations reservations){
        dao.addReservations(reservations);
        return "添加成功";
    }

    //添加
    @PostMapping("reservationsjson")
    public CommonResult addReservationsJson(Reservations reservations, Guests guests, Rooms rooms){
        // 调用 dao 中的 addReservations 方法，传入从请求体中获取的 Reservations 对象，
        // 该方法用于将新的员工记录添加到数据库中。
        System.out.println(guests.getId_number());
        easyS.addReservations(reservations);
        easyE.addGuests(guests);
        easyR.editRooms_check(rooms);
        // 调用 easyS 中的 getReservations 方法，传入刚刚添加的员工的 ID，
        // 该方法用于从数据库中检索该员工的详细信息。
        reservations =easyS.getReservations(reservations.getId());
        // 返回一个 CommonResult 对象，表示操作成功，并携带新添加的员工对象作为数据。
        return CommonResult.success(reservations);
    }

    //    @DeleteMapping("del1/{id}")
//    public String delReservations(@PathVariable int id){
//       dao.delReservations(id);
//       return "删除成功";
//    }
    @PutMapping("edit3")
    public String editReservations(Reservations reservations){
        dao.editReservations(reservations);
        return "修改成功";
    }

    @GetMapping("reservations")
    public CommonResult getSearchReservations(Reservations reservations){
        // 调用 dao 中的 getSearchReservations 方法，传入 Reservations 对象，执行搜索员工的操作并返回匹配的员工列表。
        // 返回一个成功的 CommonResult 对象，其中包含查询到的员工列表。
        List<Reservations> list=dao.getSearchReservations(reservations);
        return CommonResult.success(list);
    }
    //删除
    @DeleteMapping("reservations/{id}")
    public CommonResult delReservations(@PathVariable int id,Rooms rooms){
        easyR.editRooms_check(rooms);
        //调用 easyS 中的 delGuests 方法，传入从 URL 中获取的 id 参数，
        // 该方法用于删除指定 ID 的客人信息，并返回受影响的行数。
        int count= easyS.delReservations(id);

        // 如果 delGuests 方法返回的 count 大于 0，表示删除成功，
        // 此时返回一个 CommonResult 对象，表示操作成功，并携带 count 作为额外信息。
        if (count>0){
            return CommonResult.success(count);
        }else{
            // 如果 count 不大于 0，表示删除失败或未找到指定 ID 的客人信息，
            // 此时返回一个 CommonResult 对象，表示操作失败。
            return CommonResult.fail();
        }
    }

    //修改
    @PutMapping("reservationsjson")
    public CommonResult editReservationsJson(Reservations reservations,Guests guests,Rooms rooms){
        easyE.editGuests(guests);
        int count=easyS.editReservations(reservations);

        reservations=easyS.getReservations(reservations.getId());
        return CommonResult.success(reservations);
    }

    @PutMapping("reservations_status")
    public CommonResult Reservations_room(Reservations reservations,Rooms rooms){
        int count=easyS.editReservations_room(reservations);
        easyR.editRooms_check(rooms);
        reservations=easyS.getReservations(reservations.getId());
        return CommonResult.success(reservations);
    }
}
